package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: YKH
 * Date: 2022-08-07
 * Time: 20:14
 */
//写一个程序 ,遍历目录, 看某个输入的词是否在文件名或者文件内容中存在.
public class Demo15 {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入要搜素的路径:");
        Scanner scanner = new Scanner(System.in);
        String rootpath = scanner.next();
        File root = new File(rootpath);
        if(!root.exists()) {
            System.out.println("要扫描的目录不存在");
            return;
        }
        if( !root.isDirectory() ){
            System.out.println( "输入的路径不存在,无法扫描");
            return;
        }
        System.out.println("请输入要查询内容:");
        String tofind = scanner.next();
        // 递归遍历目录
        scan(root,tofind);
    }

    public static void scan( File root, String tofind) throws IOException {
        File[] files = root.listFiles();
        if( files == null) {
            return;
        }
        for( File f : files) {
            if( f.isDirectory()) {
                scan( f, tofind);
            } else {
                find(f, tofind);
            }
        }
    }

    public static void find( File f ,String tofind) throws IOException {
        // 是不是文件名的一部分
        if( f.getName().contains(tofind)) {
            System.out.println( "包含关键字的文件名 :"+f.getCanonicalPath());
            return;
        }
        // 是不是文件内容的一部分
        try(InputStream inputStream = new FileInputStream(f)) {
            StringBuffer stringBuffer = new StringBuffer();
            Scanner scanner = new Scanner(inputStream);
            while (scanner.hasNextLine()) {
                stringBuffer.append(scanner.nextLine());
            }
            // 读取完毕了.
            if( stringBuffer.indexOf(tofind) >=0) {
                System.out.println( "包含关键字的的文件 :" + f.getCanonicalPath());
                return;
            }
        }
    }
}
